import { TYPE } from './Tab';

function setEl(el: string | undefined, type: TYPE): HTMLElement {
  if (!el) {
    throw new Error('el must be exist.');
  }

  const isMark: boolean = /^(\.|\#)/.test(el);

  let _el: HTMLElement | null;

  //不是以. 或 以# 开头时
  if (!isMark) {
    //帮其加. 或 #开头
    _el = document.querySelector(`.${el}`) || document.querySelector(`#${el}`);
  } else {
    //是以. 或 以# 开头时
    _el = document.querySelector(el);
  }

  //没有写el标签时报错
  if (!_el) {
    throw new Error('This element with the class or ID name is not exist');
  }

  _el.className = `tab ${type}`;

  return _el;
}

/**
 * 包装type类型
 * @param type
 * @returns 返回一个TYPE类型的默认值
 */
function setType(type: TYPE | string | undefined): TYPE {
  //没有传type时
  if (!type) {
    // 'fade'
    return TYPE.FADE;
  }

  //有传type时进行比对
  // 'fade' or 'slide'
  for (let k in TYPE) {
    if (TYPE[k] === type) {
      //将用户传的type字符串断言为TYPE类型数据
      return type as TYPE;
    }
  }

  return TYPE.FADE;
}

export { setEl, setType };
